package jumavidesktop.GUI.Mantenimientos;
import jumavidesktop.GUI.Mantenimientos.interfaz.IMovimientoMante;
import jumavidesktop.LibVimso.AuxVimso;
import jumavidesktop.Otros.Pojos.MyRespuesta;
import jumavidesktop.Persistencia.Dao.Interfaces.IDao;

/**
 *
 * @author vimso
 */
public  abstract class ControladorAbs <T> implements IMovimientoMante {   

    private boolean  creandoEntidad;

    public boolean isCreandoEntidad() {
        return creandoEntidad;
    }

    public void setCreandoEntidad(boolean creandoEntidad) {
        this.creandoEntidad = creandoEntidad;
    }
    //<editor-fold defaultstate="collapsed" desc="Movimiento">
    private MyRespuesta moverRegistros(AuxVimso.Movimiento movi) {
        //Según el el criterio de orden me muevo al inicio
        T entidad= (T)this.getDaoGenerico().getEntidadMovimiento(this.getNombreJPQLEntidad(),this.getCriterioBusqueda(),this.getValorSegunCriterio(), movi,this.getCampoId(),this.getId());
        if(entidad!=null){
            this.setEntidadActual(entidad);
            return new MyRespuesta();
        } else {
            //si no existen registros entonces
            if (!this.getDaoGenerico().tieneRegistros()) {
                this.setEntidadActual(null);
            }
            return new MyRespuesta("No se han encontrado registros");
        }
    }

    @Override
    public  MyRespuesta inicio()
            {
                return this.moverRegistros(AuxVimso.Movimiento.INICIO);
            }
    @Override
    public MyRespuesta anterior()
            {
                MyRespuesta resp= this.moverRegistros(AuxVimso.Movimiento.ANTERIOR);
                
                //Si no encuentra el anterior registro, será por que es el primero o nuev primero(caso k se hubiese borrado el anteriro primero)
                if (!resp.getTodoOK()) {
                    resp=this.moverRegistros(AuxVimso.Movimiento.INICIO);
                }
                return resp;
            }
    @Override
    public  MyRespuesta siguiente()
            {
                return this.moverRegistros(AuxVimso.Movimiento.SIGUIENTE);
            }
    @Override
    public  MyRespuesta ultimo()
            {
                return this.moverRegistros(AuxVimso.Movimiento.ULTIMO);
            }    
    //</editor-fold>
    
    //<editor-fold defaultstate="collapsed" desc="Métodos a implementar ">
    
    abstract public  String getValorSegunCriterio() ;
    abstract public  String getCriterioBusqueda();
    abstract public  String getNombreJPQLEntidad();
    abstract public  IDao getDaoGenerico() ;
    abstract public  T getEntidadActual() ;
    abstract public  void setEntidadActual(T entidad) ;
    abstract public  String getId();
    abstract public  String getCampoId();
    
    //</editor-fold>
}
